package main

import "fmt"

func main() {
	/*
		// 浮点型
		var f1 float32 = 3.14
		var f2 float64 = 3.1415926
		// 短变量默认的类型是float64
		f3 := 6.18
		fmt.Println(f1, f2)
		// %f 作为占位符，默认是保留小数点后6位
		// 可以通过.n来设置要保留的位数
		fmt.Printf("f1=%.2f, 类型%T \n", f1, f1)
		fmt.Printf("f2=%.4f, 类型%T \n", f2, f2)
		fmt.Printf("f3=%.2f, 类型%T", f3, f3)
		fmt.Println(f2 + f3)

		// 布尔型
		// 只有两个值，分别是true和false，代表的是真和假
		var b1 bool = true
		var b2 bool = false
		fmt.Println(b1, b2)
		fmt.Printf("b1 = %t， 类型%T \n", b1, b1)
		fmt.Println(3 > 1, 1 > 3)

		// 字符串型
		// 必须使用双引号包裹
		var s1 string = "hello"
		fmt.Println(s1)
		// 使用反引号``包裹字符串
		var s2 string = `
			xxx
		床前明月光
		疑是地上霜
		`
		fmt.Println(s2)

		// 转义字符
		// 使用反斜杠\，对后边的一个字符进行转义，改变字符本身的意义
		// str1 := "hello\nworld"
		// str1 := "hello \" \t world"
		// fmt.Println(str1)
		// 字符串连接
		title := "小米15"
		// 商品名称：xxx
		fmt.Println("商品名称：" + title)
		first_name := "王"
		last_name := "小明"
		fmt.Println(first_name + last_name)

		// 字符串长度
		// 单位是字节，每个英文字符占1个字节
		// 使用的字符编码是UTF-8，每个汉字占3个字节
		str1 := "hello世界"
		// fmt.Println(len(str1))  // len() 长度
		// 访问其中的字符，使用下标/索引，是go程序自动为每个字符设置的编号
		// 是一个从0开始的整数
		// 语法格式  字符串[下标]
		fmt.Println(str1[0], str1[1]) // 得到的字符的编码
		fmt.Printf("第1个字符%c， 第2个字符%c \n", str1[0], str1[1])
		fmt.Println(str1[5])
		fmt.Printf("第6个字符%c\n", str1[5])
		// 通过切片访问一段 字符串[开始下标:结束下标]，包含开始，不包含结束
		fmt.Println(str1[5:8])

		str2 := "hello世界"
		// 如果开始下标是从0开始，可以省略开始
		// fmt.Println(str2[0:5], str2[:5])
		// 如果切到最后，省略结束即可
		fmt.Println(str2[5:])
		// 开始和结束都不写，表示从头切到尾
		fmt.Println(str2[:])
	*/
	// 字符型
	// 使用单引号，包裹一个字符，得到的是一个字符编码值
	// byte 对应的是一个 uint8
	var s1 byte = 'h' // 104
	// var s1 uint8 = 104
	// rune 对应的是一个 int32
	var s2 rune = '中' // 20013
	// var s2 int32 = 20013
	fmt.Println(s1, s2)

	fmt.Printf("s1=%c 类型%T s2=%c 类型%T", s1, s1, s2, s2)

	// nil 空
}
